#include "getinf.h"

const lv_img_dsc_t * get_img_dsc_by_ver_name(const char * ver_name)
{
    // 防御性检查：若传入 NULL，直接返回 NULL（避免 strcmp 空指针访问）
    if(ver_name == NULL) {
        printf("get_img_dsc_by_ver_name: ver_name is NULL!\n");
        return NULL;
    }

    // 匹配图片名称，返回对应的图片描述符
    if(strcmp(ver_name, "kele") == 0) {
        return &kele; // 可乐图片
    } else if(strcmp(ver_name, "niunai") == 0) {
        return &niunai; // 牛奶图片
    } else if(strcmp(ver_name, "kafei") == 0) {
        return &kafei; // 咖啡图片
    } else if(strcmp(ver_name, "shui") == 0) {
        return &shui; // 水图片
    } else if(strcmp(ver_name, "lvcha") == 0) {
        return &lvcha; // 绿茶图片
    } else {
        // 未知图片：打印提示并返回 NULL
        printf("get_img_dsc_by_ver_name: unknown image name -> %s\n", ver_name);
        return &wu; // 问号图片
    }
}

void readtxt()
{
    shangpin = fopen("shangpin.txt", "r");
    if(shangpin == NULL) {
        // 打印错误原因（如文件不存在、权限不足）
        perror("打开失败！\n");
        return;
    }
    char line[256];
    while(fgets(line, sizeof(line), shangpin) != NULL) {
        // 步骤1：去除行尾的换行符（\n 或 \r\n，兼容Windows/Linux格式）
        line[strcspn(line, "\r\n")] = '\0';
        // 步骤2：按逗号分割每行数据（对应TXT格式：,name,price,stock,ver_name）
        char * token; // 存储分割后的字段
        // 分割第1个字段：商品名称
        token = strtok(line, ",");
        if(token == NULL) {
            continue;
        } // 格式错误，跳过该行
        char name[50];
        strncpy(name, token, sizeof(name) - 1);
        name[sizeof(name) - 1] = '\0';

        // 分割第2个字段：商品价格
        token = strtok(NULL, ",");
        if(token == NULL) {
            continue;
        }
        float price = atof(token); // 字符串转浮点数

        // 分割第3个字段：商品库存
        token = strtok(NULL, ",");
        if(token == NULL) {
            continue;
        }
        int stock = atoi(token);

        // 分割第4个字段：图片名字
        token = strtok(NULL, ",");
        if(token == NULL) {
            continue;
        }
        char ver_name[50];
        strncpy(ver_name, token, sizeof(ver_name) - 1);
        ver_name[sizeof(ver_name) - 1] = '\0';

        // 匹配图片描述符（核心：将ver_name映射到内置图片）
        lv_img_dsc_t * img_dsc = get_img_dsc_by_ver_name(ver_name);

        // 步骤3：创建节点并插入链表
        list_insert_tail(name, price, stock, ver_name, NULL, img_dsc, proinf);
    }
    fclose(shangpin);
}

void writetxt()
{
    shangpin = fopen("shangpin.txt", "w");
    if(shangpin == NULL) {
        // 打印错误原因（如文件不存在、权限不足）
        perror("打开失败！\n");
        return;
    }
    if(proinf == NULL) {
        printf("proinf is NULL!\n");
        return;
    }
    // 指针遍历链表
    dlist * h = proinf->next;
    while(h != proinf) {
        printf("h=%p, name=%s\n", h, h->name);
        // 将节点内的信息拼接
        char buf[256];
        sprintf(buf, "%s,%f,%d,%s", h->name, h->price, h->stock, h->ver_name);
        // 写入记事本中
        fprintf(shangpin, "%s\n", buf);
        h = h->next;
    }
    fclose(shangpin);
}